home *** CD-ROM | disk | FTP | other *** search
- %---------------------------------------------------------------------
- %----Dining philosophers for Linda Prolog
- %----
- %----Written by Geoff Sutcliffe
- %---------------------------------------------------------------------
- dine(Number_of_philosophers,Number_of_eats):-
- First_philosopher_number is Number_of_philosophers -1,
- set_table_and_philosophers(First_philosopher_number,
- Number_of_philosophers,Number_of_eats).
- %---------------------------------------------------------------------
- %----Supply the room tickets, chopsticks and philosophers
- set_table_and_philosophers(0,Number_of_philosophers,Number_of_eats):-
- !,
- out(chopstick(0)),
- eval(try_eat(0,Number_of_philosophers,Number_of_eats),philosophers).
-
- set_table_and_philosophers(Philosopher_number,Number_of_philosophers,
- Number_of_eats):-
- out(ticket),
- out(chopstick(Philosopher_number)),
- eval(try_eat(Philosopher_number,Number_of_philosophers,
- Number_of_eats),philosophers),
- Next_philosopher_number is Philosopher_number - 1,
- set_table_and_philosophers(Next_philosopher_number,
- Number_of_philosophers,Number_of_eats).
- %---------------------------------------------------------------------
- try_eat(Philosopher_number,_,0):-
- send_request(write('Philosopher completed :')),
- send_request(writeln(Philosopher_number)).
-
- try_eat(Philosopher_number,Number_of_philosophers,Number_of_eats):-
- in(ticket),
- in(chopstick(Philosopher_number)),
- Next_chopstick_number is (Philosopher_number + 1) mod
- Number_of_philosophers,
- in(chopstick(Next_chopstick_number)),
- write('Philosopher '),
- write(Philosopher_number),
- writeln(' is eating'),
- out(chopstick(Philosopher_number)),
- out(chopstick(Next_chopstick_number)),
- out(ticket),
- write('Philosopher '),
- write(Philosopher_number),
- writeln(' is thinking'),
- New_number_of_eats is Number_of_eats - 1,
- try_eat(Philosopher_number,Number_of_philosophers,
- New_number_of_eats).
- %---------------------------------------------------------------------
-